package com.iespring.service.admin.brand;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.iespring.bean.admin.brand.bo.BrandBo;
import com.iespring.bean.admin.brand.po.BrandPo;
import com.iespring.bean.common.BasePageInfo;
import com.iespring.bean.common.BaseRespVo;
import com.iespring.bean.common.CommonData;
import com.iespring.mapper.admin.BrandBackMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author weigwen
 * @Description:
 * @Date 2022/12/29 17:35
 */

@Service
public class BrandServiceImpl implements BrandService {

    @Autowired
    BrandBackMapper brandMapper;

    /**
     * 数据查询接口逻辑
     * @param basePageInfo
     * @return
     */
    @Override
    public CommonData brandList(BasePageInfo basePageInfo) {
        //开启分页
        PageHelper.startPage(basePageInfo.getPage(), basePageInfo.getLimit());
        //查询到的数据根据basePageInfo中的sort值与order值进行排列反馈
        List<BrandPo> brandPos = brandMapper.selectBrand(basePageInfo);
        PageInfo<BrandPo> brandPoPageInfo = new PageInfo<>(brandPos);
        PageHelper.clearPage();
        return CommonData.data(brandPoPageInfo);
    }

    /**
     * 数据插入接口逻辑
     * @param brandBo
     * @return
     */
    //TODO 入参brandBo中的name，desc, picurl对应数据表字段不能为null，进行逻辑校验与反馈
    //TODO 如果存在同名的逻辑删除操作的数据，对那一个进行更新操作？
    // 目前来看，会新增一条记录的同时还激活已经逻辑删除的所有同名记录
    @Override
    public BaseRespVo brandCreate(BrandBo brandBo) {
        //根据BrandBo中的name参数，判断已经进行过逻辑删除操作的数据是否与要插入的数据同名
        //同名，则直接进行逻辑删除过的数据的更新操作
        int code = brandMapper.updateDeletedBrandByName(brandBo);
        if (code != 1){
            //不同名，即更新操作失败，插入一条新的数据
            brandMapper.insertBrand(brandBo);
            BrandBo brandBo3 = brandMapper.selectBrandById(brandBo.getId());
            return BaseRespVo.ok(brandBo3);
        }
        //更新操作成功，根据返回的id查询到
        BrandBo brandBo2 = brandMapper.selectBrandById(brandBo.getId());
        return BaseRespVo.ok(brandBo2);
    }

    /**
     * 数据更新接口逻辑
     * @param brandPo
     * @return
     */
    //TODO 入参brandPo中的name，desc, picurl对应数据表字段不能为null，进行逻辑校验与反馈
    @Override
    public BaseRespVo brandUpdate(BrandPo brandPo) {
        int code = brandMapper.updateBrand(brandPo);
        if (code != 1){
            return BaseRespVo.invalidData(" 更新失败！！！");
        }
        BrandPo brandPo1 = brandMapper.selectBrandById2(brandPo.getId());
        return BaseRespVo.ok(brandPo1);
    }

    /**
     * 数据删除接口逻辑
     * @param brandPo
     * @return
     */
    @Override
    public BaseRespVo brandDelete(BrandPo brandPo) {
        int result = brandMapper.updateDeletedStatus(brandPo);
        System.out.println(result);
        if (result != 1){
            return BaseRespVo.invalidData(" 删除失败！！！");
        }
        return BaseRespVo.ok();
    }

}
